// 观察者模式
// 观察者要放到被观察者中，观察者要提供一个update方法，
// 当被观察者数据发生变化，需要执行观察者update方法

// 被观察者
function observer(){
    // 状态
    this.state = '开心'
    // 存储观察者
    this.arr = []
}
// 被观察者中绑定观察者
observer.prototype.attach=function(s){
    this.arr.push(s)
}
// 被观察者状态变化
observer.prototype.setState=function(newVal){
    this.state=newVal
    this.arr.forEach(s=>s.update(newVal))
}

// 观察者
function subject(name){
    this.name = name
}
// 观察者更新方法
subject.prototype.update=function(newVal){
    console.log(`${this.name}检测到了宝宝的心情变化：${newVal}`);
    
}

var o = new observer()
var s1 = new subject('我')
var s2 = new subject('媳妇')

o.attach(s1)
o.attach(s2)

o.setState('不开心')

setTimeout(() => {
    o.setState('沮丧')
}, 1000);